import { app, BrowserWindow, screen, ipcMain, dialog, shell } from 'electron'
import { electronApp, optimizer } from '@electron-toolkit/utils'

import LoadingFrame from './frame/LoadingFrame'
import MainFrame from './frame/MainFrame'
import EventRouter from "./router/EventRouter";
import routers from "./router/router.template";

//当 Electron 初始化完成并准备好创建浏览器窗口时，调用此方法。
// 某些 API 只能在此事件发生后使用。
app.whenReady().then(() => {
  const eventRouter = new EventRouter()

  const loadingWindow = new LoadingFrame()
  loadingWindow.create()

  const mainWindow = new MainFrame()
  mainWindow.create()

  eventRouter.addApi('app', app)
  eventRouter.addApi('loadingWindow', loadingWindow)
  eventRouter.addApi('window', mainWindow)
  eventRouter.addApi('dialog', dialog)
  eventRouter.addApi('shell', shell)
  eventRouter.addApi('screen', screen.getPrimaryDisplay())
  eventRouter.addRoutes(routers)

  ipcMain.handle('renderer-to-main', (e, data) => {
    eventRouter.router(data)
  })

  // 为窗口设置应用程序用户模型 ID
  electronApp.setAppUserModelId('cn.xuexiluxian.electron')

  // 在开发中默认通过 F12 打开或关闭 DevTools
  // 并忽略生产环境下的 CommandOrControl + R。
  // 详见 https://github.com/alex8088/electron-toolkit/tree/master/packages/utils
  app.on('browser-window-created', (_, window) => {
    optimizer.watchWindowShortcuts(window)
  })

  app.on('activate', function () {
    // 在 macOS 上，当单击 dock 图标且没有其他窗口打开时，通常会在应用程序中重新创建窗口。
    if (BrowserWindow.getAllWindows().length === 0){
      const frame = new MainFrame()
      frame.create()
      frame.show()
    }
  })
})

// 当所有窗口关闭时退出，但在 macOS 上除外。
// 在 macOS 上，应用程序及其菜单栏保持活动状态，直到用户使用 Cmd + Q 显式退出。
app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

// In this file you can include the rest of your app"s specific main process
// code. You can also put them in separate files and require them here.
